/**
 * 测试使用 xcx_id 进行小程序上传
 */

const axios = require('axios');

// 配置
const API_BASE_URL = 'http://localhost:3000';
const API_SECRET_KEY = 'yueqiankejiyueqiankejiyueqiankeji';

/**
 * 测试使用 xcx_id 上传小程序
 */
async function testUploadWithXcxId() {
    try {
        console.log('🚀 测试使用 xcx_id 上传小程序...');
        
        const uploadData = {
            appid: 'wx1234567890abcdef',
            privateKey: `-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC...
(这里替换为真实的私钥内容)
-----END PRIVATE KEY-----`,
            url: 'api.example.com',
            sourceDomain: 'zj.yueqianyun.com',  // 🔑 要被替换的原域名
            uniacid: 123,
            entryPagePath: 'pages/index/index',
            version: '1.0.0',
            desc: '通过xcx_id自动匹配代码包上传',
            xcx_id: 'hosting123'  // 🔑 关键参数：小程序托管ID
        };
        
        console.log('请求参数:', {
            ...uploadData,
            privateKey: '***隐藏私钥内容***'
        });
        
        const response = await axios.post(`${API_BASE_URL}/upload`, uploadData, {
            headers: {
                'Content-Type': 'application/json',
                'X-API-Key': API_SECRET_KEY
            },
            timeout: 300000 // 5分钟超时
        });
        
        console.log('✅ 上传成功:', response.data);
        console.log('📁 使用的代码包:', response.data.data.sourceFolder);
        console.log('🆔 小程序托管ID:', response.data.data.xcx_id);
        
        return true;
    } catch (error) {
        console.error('❌ 上传失败:');
        if (error.response) {
            console.error('状态码:', error.response.status);
            console.error('错误信息:', error.response.data);
        } else {
            console.error('网络错误:', error.message);
        }
        return false;
    }
}

/**
 * 测试多个不同的小程序托管ID
 */
async function testMultipleXcxIds() {
    const xcxIds = ['hosting123', 'hosting456', 'hosting789'];
    
    console.log('\n🎯 测试多个小程序托管ID...');
    
    for (const xcxId of xcxIds) {
        console.log(`\n--- 测试 xcx_id: ${xcxId} ---`);
        
        try {
            const response = await axios.post(`${API_BASE_URL}/upload`, {
                appid: `wx_${xcxId}`,
                privateKey: 'REPLACE_WITH_REAL_KEY',
                url: 'api.example.com',
                sourceDomain: 'zj.yueqianyun.com',
                uniacid: parseInt(xcxId.replace('hosting', '')),
                entryPagePath: 'pages/index/index',
                version: '1.0.0',
                desc: `测试${xcxId}`,
                xcx_id: xcxId
            }, {
                headers: {
                    'Content-Type': 'application/json',
                    'X-API-Key': API_SECRET_KEY
                },
                timeout: 30000
            });
            
            console.log(`✅ ${xcxId} 匹配到代码包:`, response.data.data.sourceFolder);
            
        } catch (error) {
            if (error.response?.status === 400) {
                console.log(`⚠️ ${xcxId} 没有找到对应的代码包`);
            } else {
                console.error(`❌ ${xcxId} 处理失败:`, error.response?.data?.message || error.message);
            }
        }
        
        // 延迟一下，避免请求过快
        await new Promise(resolve => setTimeout(resolve, 1000));
    }
}

/**
 * 展示curl调用示例
 */
function showCurlExample() {
    console.log('\n📋 curl 调用示例:');
    console.log(`
curl -X POST ${API_BASE_URL}/upload \\
  -H "Content-Type: application/json" \\
  -H "X-API-Key: ${API_SECRET_KEY}" \\
  -d '{
    "appid": "wx1234567890abcdef",
    "privateKey": "-----BEGIN PRIVATE KEY-----\\n...\\n-----END PRIVATE KEY-----",
    "url": "api.example.com",
    "sourceDomain": "zj.yueqianyun.com",
    "uniacid": 123,
    "entryPagePath": "pages/index/index",
    "version": "1.0.0",
    "desc": "通过xcx_id自动匹配",
    "xcx_id": "hosting123"
  }'
    `);
}

// 主函数
async function main() {
    console.log('========================================');
    console.log('小程序 xcx_id 上传测试');
    console.log('========================================');
    
    // 显示使用说明
    console.log('\n💡 使用说明:');
    console.log('1. xcx_id 参数用于自动匹配代码包文件夹');
    console.log('2. 系统会查找 code_{xcx_id}_{timestamp} 格式的文件夹');
    console.log('3. 如果有多个匹配，会选择时间戳最新的');
    console.log('4. sourceDomain 参数指定要被替换的原域名');
    console.log('5. url 参数指定替换后的新域名');
    console.log('6. 确保对应的代码包已经通过 /upload-file 接口上传');
    
    showCurlExample();
    
    // 运行测试
    console.log('\n🔍 开始测试...');
    // await testUploadWithXcxId();  // 取消注释以测试真实上传
    await testMultipleXcxIds();
}

// 如果直接运行此脚本
if (require.main === module) {
    main().catch(console.error);
}

module.exports = {
    testUploadWithXcxId,
    testMultipleXcxIds
}; 